/*
 * PantallaMatrizCorrelacion.java
 *
 * Created on 21 de febrero de 2006, 09:47 AM
 */
package ig.metrica.ui.matrizcorrelacion;

import ejb.metrica.matriz.correlacion.MatrizDTO;
import ig.metrica.riesgo.FactorRiesgoMatrizCorrelacionMetrica;
import ig.metrica.riesgo.ZonaDTO;
import ig.metrica.ui.PrincipalMetrica;
import ig.util.ITeclas;
import ig.util.ModelTabla;
import ig.util.MyTableModel;
import ig.util.RenderTabla;
import ig.metrica.ui.interfaces.comunes.IMetodosPantallas;
import ig.metrica.ui.matriz.correlacion.calculada.MWizzar;
import ig.metrica.ui.pantallas.comunes.ManipulacionDatos;
import ig.util.CodigoBotones;
import ig.util.Fechas;
import ig.util.MetaFabricaFormateadores;
import ig.util.MyTableModelFactores;
import ig.util.NoContinuaException;
import java.awt.Component;
import java.sql.Date;
import java.util.Collection;
import java.util.ArrayList;
import java.util.Hashtable;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author  jsanchez
 */
public class PantallaMatrizCorrelacion extends javax.swing.JPanel implements IMetodosPantallas {

    private ManipulacionDatos mpd;
    private ModeloMatrizCorrelacion modelo = null;
    private String[] columnName = {};
    private String[] columnNameFactore = {"Factor", "Selecci\u00F3n", "Cambio Esperado"};
    private boolean[] editFactores = {true, true, true};
    private JFrame rootPanel = null;
    private long fehcaInt;
    private boolean eliminarNoConfirmar = false;
    private Collection<ZonaDTO> CZonas = null;
    private Collection<ig.metrica.riesgo.AjustesAlternosDTO> CAjustes = null;
    public int estado;
    private Integer id = null;
    private Object[][] obj = null;
    private int row = -1;

    /**
     * Creates new form PantallaMatrizCorrelacion
     */
    public PantallaMatrizCorrelacion(JFrame root) {
        this.rootPanel = root;
        initComponents();

        mpd = new ManipulacionDatos(true, false);
        mpd.setLimpiarComponentes(true);
        mpd.setConfimacioSalir(true, "Desea cerrar la ventane de matriz de correlaci\u00F3n");
        mpd.setPanelMetodosPantalla(this);
        mpd.setSize(700, 600);
        mpd.setTitle("Matriz de Correlaci\u00F3n");
        mpd.setMensajeDialog(true);
        modelo = new ModeloMatrizCorrelacion(this);

        Table_MatrixCorrelacion.setDefaultRenderer(Object.class, new RenderTabla(Table_MatrixCorrelacion));
        String fecha = String.valueOf(Fechas.getFormatoString());
        fehcaInt = Fechas.getFechaActual();
        FText_FechaPublicacion.setText(fecha);
        this.Table_Factores.getTableHeader().setReorderingAllowed(false);
        this.Table_MatrixCorrelacion.getTableHeader().setReorderingAllowed(false);

        this.Table_Factores.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        this.Table_MatrixCorrelacion.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        inicializar();
    }

    private void inicializar() {
        this.limpiarTablas();
        if (this.getTipo() == 0) {
            this.TPane.setVisible(true);
            this.TPane.setSelectedIndex(0);
            this.Button_AddFactor.setVisible(true);
            this.Button_RemFactor.setVisible(true);
        } else if (this.getTipo() == 1) {
            this.TPane.setVisible(true);
            this.TPane.setSelectedIndex(1);
            this.modelo.setTipo(1);
            this.Button_AddFactor.setVisible(false);
            this.Button_RemFactor.setVisible(false);
        } else {
            this.TPane.setVisible(false);
        }
    }

    public void setColumnName(String[] columnName) {
        this.columnName = columnName;
        Text_NumeroFactores.setText(String.valueOf(columnName.length));
    }

    public Integer getId() {
        return this.id;
    }

    public void setID(Integer id) {
        this.id = id;
    }

    public void setDataMatriz(Object[][] obj) {
        //        this.limpiarTablas();
        Table_MatrixCorrelacion.setModel(new ModelTabla(Table_MatrixCorrelacion, obj, columnName));
        Table_MatrixCorrelacion.updateUI();
    }

    public Object[][] getDataMatriz() {
        return ((ModelTabla) Table_MatrixCorrelacion.getModel()).getData();
    }

    public String getNameColumna(int col) {
        return ((ModelTabla) Table_MatrixCorrelacion.getModel()).getColumnName(col);
    }

    public void setDataMatriz(String _id, String nombre, String descripcion, String fechaPublicacion) {
        TextA_Descripcion.setText(descripcion);
        Text_NombreMatriz.setText(nombre);
        FText_FechaPublicacion.setText(fechaPublicacion);
        this.id = Integer.valueOf(_id);
    }

    public void setDataFactor(Object[][] obj) {
        this.obj = obj;
        ((MyTableModelFactores) Table_Factores.getModel()).setData(obj);
        Table_Factores.updateUI();
    }

    public String getDescripcion() {
        return TextA_Descripcion.getText();
    }

    public int getNumeroFactores() {
        return Table_MatrixCorrelacion.getRowCount();
    }

    public String getNombre() {
        return Text_NombreMatriz.getText();
    }

    public Date getFechaDefinicion() {
        //System.out.println(this.FText_FechaPublicacion.getText());
        Integer DIA = Integer.valueOf(this.FText_FechaPublicacion.getText().substring(0, 2));
        Integer MES = Integer.valueOf(this.FText_FechaPublicacion.getText().substring(3, 5));
        Integer ANNO = Integer.valueOf(this.FText_FechaPublicacion.getText().substring(6));
        //System.out.println(ANNO+"-"+MES+"-"+DIA);
        return new Date(ANNO - 1900, MES - 1, DIA);
    }

    public ManipulacionDatos getInternalFrame() {
        return mpd;
    }

    public Integer getTipo() {
        return 0;//.CTipo.getSelectedIndex();
    }

    public void validar() throws NoContinuaException {
    }

    public void guardar() throws NoContinuaException {
        if (this.Text_NombreMatriz.getText().trim().length() > 0) {
            modelo.guardar();
            modelo.buscar();
            mpd.setEstado(CodigoBotones.grupoEntrada + CodigoBotones.eliminar + CodigoBotones.modificar);
            this.Button_AddFactor.setEnabled(false);
            this.Button_RemFactor.setEnabled(false);
        } else {
            throw new NoContinuaException("No se han digitado todos los parametros");
        }
    }

    public void buscar() throws NoContinuaException {
        this.mpd.setEstado(this.mpd.getEstado() + CodigoBotones.eliminar + CodigoBotones.buscar + CodigoBotones.nuevo - CodigoBotones.cancelar);
        new DBuscar(modelo);
        this.modelo.buscar();
    }
    private String ESTADO = "";

    public void modificar() throws NoContinuaException {
        ESTADO = "M";
        this.mpd.setLimpiarComponentes(true);
        //        this.BAddEscalera.setEnabled(true);
//        this.BDelEscalera.setEnabled(true);
        this.Button_AddFactor.setEnabled(true);
        this.Button_RemFactor.setEnabled(true);
    ////        Table_Factores.setName(null);
////        this.mpd.habilitaControles(true);
//        this.TZonas.setEnabled(true);
//        this.TBandas.setEnabled(true);
//        this.TAjustes.setEnabled(true);
//        this.Table_Factores.setEnabled(true);
//        this.TFactoresRiesgo.setEnabled(true);
    }

    public void nuevo() throws NoContinuaException {
        if (JOptionPane.showConfirmDialog(this, "Desea crear una Matriz Calculada", "", JOptionPane.YES_NO_OPTION) == 0) {
            MWizzar mcalculada = new MWizzar(this.getFrame());
            mpd.setLimpiarComponentes(false);
            if (!mcalculada.isCancelado()) {
                Hashtable<String, Object> datos = (Hashtable<String, Object>) mcalculada.getObject();
                System.out.println(datos);
                modelo.setLlega(datos);
                mcalculada.dispose();
                modelo.buscar();
                Table_Factores.setEnabled(true);
            }
        } else if (JOptionPane.showConfirmDialog(this, "Desea crear una Matriz desde una Hoja de Calculo", "", JOptionPane.YES_NO_OPTION) == 0) {
            System.out.println("Excel");
        }else{
            mpd.setLimpiarComponentes(true);
            ESTADO = "N";
            this.id = null;
            this.limpiarTablas();
            this.modelo.nuevo();            
        }
    }

    public void limpiarTablas() {
        //        System.out.println("limpiarTablas->"+n);
        String[] columnNameTMP = {};
        Text_NumeroFactores.setText("");
        Table_MatrixCorrelacion.setModel(new ModelTabla(Table_MatrixCorrelacion, null, columnNameTMP));
        Table_MatrixCorrelacion.setDefaultRenderer(Object.class, new RenderTabla(Table_MatrixCorrelacion));
        Table_Factores.setModel(new MyTableModelFactores(null, columnNameFactore, editFactores));
//        this.TAjustes.setModel(new TableModelAlternos(new ArrayList(), new ArrayList()));
//        this.TZonas.setModel(new TableModelZonas(new ArrayList()));
//        this.TBandas.setModel(new TableModelBanda(new ArrayList()));
//        this.TFactoresRiesgo.setModel(new TableModelTasasInteres(new ArrayList()));
    }

    public void eliminar() throws NoContinuaException {
        if (JOptionPane.showConfirmDialog(this, "Se eliminara la matriz de correlaci\u00F3n, y cada uno de los factores a sociados a ella\n ¿ Desea eliminarla ? ", "Mensaje", JOptionPane.OK_CANCEL_OPTION) == 0) {
            this.modelo.eliminar();
            this.limpiarTablas();
        } else {
            this.mpd.setEstado(CodigoBotones.grupoEntrada + CodigoBotones.eliminar + CodigoBotones.modificar);
        }
    }

    public void salir() throws NoContinuaException {
    }

    public void imprimir() throws NoContinuaException {
    }

    public void cancelar() throws NoContinuaException {
        mpd.setLimpiarComponentes(false);
        modelo.cancelar();
        if (this.ESTADO.equals("M")) {
            this.mpd.setEstado(CodigoBotones.grupoEntrada + CodigoBotones.eliminar + CodigoBotones.modificar);
        } else if (ESTADO.equals("N")) {
            this.mpd.setEstado(CodigoBotones.grupoEntrada);
        }
    }

    public Component[] getControles() {
        return null;
    }

    public void setFrame(JFrame frame) {
    }

    public JFrame getFrame() {
        return this.rootPanel;
    }

    public void cerrando() throws NoContinuaException {
    }

    public void enabledButton_AddFactor() {
        //Button_RemFactor.setEnabled(true);
        Button_AddFactor.setEnabled(true);
    }

    public void enabledButton_RemFactor() {
        Button_RemFactor.setEnabled(true);
    //Button_AddFactor.setEnabled(true);
    }

    public String getESTADO() {
        return ESTADO;
    }

    private JFormattedTextField getFormattedTextField() {
        if (this.FText_FechaPublicacion == null) {
            FText_FechaPublicacion = new JFormattedTextField();
            DefaultFormatterFactory dff = null;
            try {
                JFormattedTextField.AbstractFormatter displayFormatter = new MaskFormatter("##/##/####");
                dff = new DefaultFormatterFactory(displayFormatter, displayFormatter, displayFormatter);
            } catch (Exception e) {
                e.printStackTrace();
            }
            FText_FechaPublicacion.setFormatterFactory(dff);
            FText_FechaPublicacion.setInputVerifier(MetaFabricaFormateadores.getDateVerifier());
            FText_FechaPublicacion.setText(Fechas.getFormatoStringNOBS());
        }
        return FText_FechaPublicacion;
    }//    public void setAjustes(Collection<ig.metrica.riesgo.AjustesAlternosDTO> _c) {
//        this.CAjustes = _c;
//        Collections.reverse((ArrayList) CAjustes);
////        ((TableModelAlternos) TAjustes.getModel()).setAjustes(this.CAjustes);
////        TAjustes.updateUI();
//    }

//    public void setZonas(Collection<ZonaDTO> c) {
//        this.CZonas = c;
//        Collections.reverse((ArrayList) CZonas);
//        //        for (ZonaDTO elem : c) {
////            System.out.println("Zona:"+elem.getNumero());
////            System.out.println("ID  :"+elem.getId());
////            for (BandasDTO elem1 : elem.getBandas()) {
////                System.out.println("    Banda:"+elem1.getNumero());
////                System.out.println("    "+elem1.getIdZona());
////                System.out.println("    "+elem1.getLimiteInferior());
////                System.out.println("    "+elem1.getLimiteSuperior());
////                for (FactorRiesgoMatrizCorrelacionMetrica elem2 : elem1.getCollection()) {
////                    System.out.println("        Factores");
////                    System.out.println("        "+elem2.getNombre());
////                    System.out.println("        "+elem2.cambioEsperadoPBS.getLimiteInferior());
////                    System.out.println("        "+elem2.cambioEsperadoPBS.getLimiteSuperior());
////                    System.out.println("        "+elem2.cambioEsperadoPBS.getCambioEsperado());
////                }
////            }
////        }
//        ((TableModelZonas) this.TZonas.getModel()).setZonas(c);
//        this.TZonas.updateUI();
//    }

//    private synchronized void updateCollection() {
//        if (this.BAddEscalera.isEnabled() && this.BDelEscalera.isEnabled()) {
//            if (TBandas.getSelectedRow() > -1) {
//                try {
//
//                    Collection<BandasDTO> bandas = ((TableModelBanda) TBandas.getModel()).getData();
//                    Collection cc = ((TableModelTasasInteres) TFactoresRiesgo.getModel()).getData();
//                    for (BandasDTO elem : bandas) {
//                    //                        elem.setCollection(cc);
//                    }
//                } catch (Exception e) {
//                    System.out.println("Epera");
//                }
//            }
//            if (TZonas.getSelectedRow() > -1) {
//                ((TableModelZonas) TZonas.getModel()).getDTO(TZonas.getSelectedRow()).setBandas(((TableModelBanda) TBandas.getModel()).getData());
//            }
//        }
//
//    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private String tablaActual = "TZonas";
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        BGTablas = new javax.swing.ButtonGroup();
        Panel_DatosMatriz = new javax.swing.JPanel();
        Text_NombreMatriz = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        FText_FechaPublicacion = getFormattedTextField () ;
        jScrollPane1 = new javax.swing.JScrollPane();
        TextA_Descripcion = new javax.swing.JTextArea();
        jLabel5 = new javax.swing.JLabel();
        TPane = new javax.swing.JTabbedPane();
        PanelMatrizCorrelacion = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        Text_NumeroFactores = new javax.swing.JTextField();
        jScrollPane3 = new javax.swing.JScrollPane();
        Table_Factores = new javax.swing.JTable();
        Button_AddFactor = new javax.swing.JButton();
        Button_RemFactor = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        Table_MatrixCorrelacion = new javax.swing.JTable();

        Panel_DatosMatriz.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        Text_NombreMatriz.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        Text_NombreMatriz.setEnabled(false);
        Text_NombreMatriz.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                Text_NombreMatrizKeyPressed(evt);
            }
        });

        jLabel1.setText("Nombre");

        jLabel2.setText(org.openide.util.NbBundle.getMessage(PantallaMatrizCorrelacion.class, "fecha.publicacion")); // NOI18N

        FText_FechaPublicacion.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        FText_FechaPublicacion.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        FText_FechaPublicacion.setEnabled(false);

        TextA_Descripcion.setColumns(20);
        TextA_Descripcion.setRows(1);
        TextA_Descripcion.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        TextA_Descripcion.setEnabled(false);
        jScrollPane1.setViewportView(TextA_Descripcion);

        jLabel5.setText("Descripción");

        jLabel3.setText("Numero de Factores");

        Text_NumeroFactores.setFont(new java.awt.Font("Dialog", 1, 24));
        Text_NumeroFactores.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        Text_NumeroFactores.setDisabledTextColor(new java.awt.Color(51, 51, 51));
        Text_NumeroFactores.setEnabled(false);
        Text_NumeroFactores.setName("NO_ALL"); // NOI18N

        Table_Factores.setFont(new java.awt.Font("Dialog", 0, 10));
        Table_Factores.setModel(new MyTableModel(null,columnNameFactore,editFactores));
        Table_Factores.setEnabled(false);
        Table_Factores.setName("NO_LIMPIAR"); // NOI18N
        Table_Factores.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                Table_FactoresMouseClicked(evt);
            }
        });
        Table_Factores.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                Table_FactoresKeyPressed(evt);
            }
        });
        jScrollPane3.setViewportView(Table_Factores);

        Button_AddFactor.setText("+");
        Button_AddFactor.setEnabled(false);
        Button_AddFactor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Button_AddFactorActionPerformed(evt);
            }
        });

        Button_RemFactor.setText("-");
        Button_RemFactor.setEnabled(false);
        Button_RemFactor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                Button_RemFactorActionPerformed(evt);
            }
        });

        Table_MatrixCorrelacion.setFont(new java.awt.Font("Dialog", 0, 10));
        Table_MatrixCorrelacion.setModel(new ModelTabla(Table_MatrixCorrelacion,null,columnName));
        Table_MatrixCorrelacion.setEnabled(false);
        jScrollPane2.setViewportView(Table_MatrixCorrelacion);

        org.jdesktop.layout.GroupLayout PanelMatrizCorrelacionLayout = new org.jdesktop.layout.GroupLayout(PanelMatrizCorrelacion);
        PanelMatrizCorrelacion.setLayout(PanelMatrizCorrelacionLayout);
        PanelMatrizCorrelacionLayout.setHorizontalGroup(
            PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, PanelMatrizCorrelacionLayout.createSequentialGroup()
                .addContainerGap()
                .add(PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
                    .add(org.jdesktop.layout.GroupLayout.LEADING, jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 677, Short.MAX_VALUE)
                    .add(PanelMatrizCorrelacionLayout.createSequentialGroup()
                        .add(PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(jLabel3)
                            .add(PanelMatrizCorrelacionLayout.createSequentialGroup()
                                .add(10, 10, 10)
                                .add(Text_NumeroFactores, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 65, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jScrollPane3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 505, Short.MAX_VALUE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                            .add(Button_RemFactor, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .add(Button_AddFactor, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap())
        );
        PanelMatrizCorrelacionLayout.setVerticalGroup(
            PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(PanelMatrizCorrelacionLayout.createSequentialGroup()
                .addContainerGap()
                .add(PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(PanelMatrizCorrelacionLayout.createSequentialGroup()
                        .add(jLabel3)
                        .add(PanelMatrizCorrelacionLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                            .add(PanelMatrizCorrelacionLayout.createSequentialGroup()
                                .add(1, 1, 1)
                                .add(Button_AddFactor)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(Button_RemFactor))
                            .add(PanelMatrizCorrelacionLayout.createSequentialGroup()
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(Text_NumeroFactores, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 60, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
                    .add(jScrollPane3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 96, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 212, Short.MAX_VALUE)
                .addContainerGap())
        );

        TPane.addTab("Matriz de Correlación", PanelMatrizCorrelacion);

        org.jdesktop.layout.GroupLayout Panel_DatosMatrizLayout = new org.jdesktop.layout.GroupLayout(Panel_DatosMatriz);
        Panel_DatosMatriz.setLayout(Panel_DatosMatrizLayout);
        Panel_DatosMatrizLayout.setHorizontalGroup(
            Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(Panel_DatosMatrizLayout.createSequentialGroup()
                .addContainerGap()
                .add(Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                    .add(jLabel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .add(jLabel5, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, Panel_DatosMatrizLayout.createSequentialGroup()
                        .add(Text_NombreMatriz, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 331, Short.MAX_VALUE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jLabel2)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(FText_FechaPublicacion, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 111, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE))
                .addContainerGap())
            .add(TPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 709, Short.MAX_VALUE)
        );
        Panel_DatosMatrizLayout.setVerticalGroup(
            Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(Panel_DatosMatrizLayout.createSequentialGroup()
                .addContainerGap()
                .add(Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(FText_FechaPublicacion, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .add(jLabel2))
                    .add(Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                        .add(jLabel1)
                        .add(Text_NombreMatriz, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(Panel_DatosMatrizLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(jLabel5)
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 35, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(TPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE))
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(Panel_DatosMatriz, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(Panel_DatosMatriz, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents
    Integer row_selecionada = -1;

    private void seleciorarCampo(String nombre) {
        tablaActual = nombre;
    }

//    private synchronized void updateVistas() {
//        tablaActual = "TZonas";
//        //        this.QUIEN.setText("ZONAS");
//        this.RZonas.setSelected(true);
//        Integer rowZona = TZonas.getSelectedRow();
//        if (TZonas.getSelectedRowCount() > -1 && rowZona > -1) {
//            ((TableModelBanda) this.TBandas.getModel()).setData(((TableModelZonas) TZonas.getModel()).getDTO(rowZona).getBandas());
//            ((TableModelAlternos) this.TAjustes.getModel()).setZonas(((TableModelZonas) TZonas.getModel()).getData(), ((TableModelZonas) TZonas.getModel()).getDTO(TZonas.getSelectedRow()));
//            if (TBandas.getSelectedRow() > -1) {
//                ((TableModelTasasInteres) TFactoresRiesgo.getModel()).setData(((TableModelBanda) TBandas.getModel()).getDTO(TBandas.getSelectedRow()).getCollection());
//            } else {
//                ((TableModelTasasInteres) TFactoresRiesgo.getModel()).setData(new ArrayList());
//            }
//        }
//    }
    private void Text_NombreMatrizKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_Text_NombreMatrizKeyPressed
        if (FText_FechaPublicacion.getText().trim().length() <= 4) {
            FText_FechaPublicacion.setText(Fechas.getFormatoStringNOBS());
        }
    }//GEN-LAST:event_Text_NombreMatrizKeyPressed

    private void Table_FactoresKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_Table_FactoresKeyPressed
        if (Table_Factores.isEnabled() && evt.getKeyCode() == ITeclas.ESPACIO) {
            Table_Factores.setEnabled(false);
            if (Table_Factores.getSelectedRow() > -1) {
                int col = Table_Factores.getSelectedColumn();
                manipularFactor(col == 1 ? true : false);
            }
            Table_Factores.setEnabled(true);
        }
    }//GEN-LAST:event_Table_FactoresKeyPressed

    public Collection<FactorRiesgoMatrizCorrelacionMetrica> getFactorRiesgoMatrizCorrelacionMetrica() {
        Collection<FactorRiesgoMatrizCorrelacionMetrica> cccc = new ArrayList<FactorRiesgoMatrizCorrelacionMetrica>();
        obj = ((MyTableModelFactores) Table_Factores.getModel()).getData();
        for (int i = 0; i < obj.length; i++) {
            Double cambioEspreado = Double.parseDouble(obj[i][2].toString());
            FactorRiesgoMatrizCorrelacionMetrica f = null;
            if (obj[i][0] instanceof FactorRiesgoMatrizCorrelacionMetrica) {
                f = (FactorRiesgoMatrizCorrelacionMetrica) obj[i][0];
            } else {
                f = new FactorRiesgoMatrizCorrelacionMetrica(obj[i][0].toString(), cambioEspreado, i + 1, -1);
                f.setNuevo(true);
            }
            f.getCambioEsperadoPBS().setCambioEsperado(cambioEspreado);
            cccc.add(f);
        }
        return cccc;
    }

    public Object[][] getData() {
        obj = ((MyTableModelFactores) Table_Factores.getModel()).getData();
        return obj;
    }

    private void Button_RemFactorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Button_RemFactorActionPerformed
        Button_RemFactor.setEnabled(false);
        if (this.Table_Factores.isEnabled()) {
            boolean eliminar = false;
            String mensaje = "Al eliminar el factor de riesgo, se remueve de la matriz de correlaci\u00F3n\ny al guardar se elimina de la base de datos.\n\n¿Desea eliminara el factor de riesgo?";
            String tmp = null;
            try {
                tmp = ((ig.metrica.riesgo.FactorRiesgoMatrizCorrelacionMetrica) Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow(), 0)).getNombre().trim();
            } catch (Exception e) {
                tmp = ((ig.metrica.riesgo.FactorRiesgoMatrizCorrelacionMetrica) Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow() - 1, 0)).getNombre().trim();
            }
            if (Table_Factores.getSelectedRow() > -1) {
                if (JOptionPane.showConfirmDialog(this, mensaje, "Mensaje", JOptionPane.OK_CANCEL_OPTION) == 0) {
                    if (!tmp.trim().equals("")) {
                        eliminarNoConfirmar = true;
                        try {
                            Table_Factores.getModel().setValueAt(new Boolean(false), Table_Factores.getSelectedRow(), 1);
                        } catch (Exception e) {
                            Table_Factores.getModel().setValueAt(new Boolean(false), Table_Factores.getSelectedRow() - 1, 1);
                        }
                        eliminar = manipularFactor(true);
                        eliminarNoConfirmar = false;
                    } else {
                        eliminar = true;
                        eliminarNoConfirmar = false;
                    }
                    if (eliminar) {
                        obj = ((MyTableModelFactores) Table_Factores.getModel()).getData();
                        modelo.eliminarFactor(row);
                        Text_NumeroFactores.setText(String.valueOf(obj.length));
                    }
                }
            }
        }
        Button_RemFactor.setEnabled(true);
//        this.TFactoresRiesgo.updateUI();
    }//GEN-LAST:event_Button_RemFactorActionPerformed
    String nameDefauld = "F";
    int secuencia = 0;
    private void Button_AddFactorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_Button_AddFactorActionPerformed
        if (this.Table_Factores.isEnabled()) {
            Button_AddFactor.setEnabled(false);
            Object[][] clon = null;
            if (obj != null) {
                clon = ((MyTableModelFactores) Table_Factores.getModel()).getData().clone();
                //clon=obj.clone();
                obj = new Object[clon.length + 1][3];
                for (int i = 0; i < obj.length; i++) {
                    try {
                        obj[i][0] = clon[i][0];
                        obj[i][1] = clon[i][1];
                        obj[i][2] = clon[i][2];
                    } catch (Exception e) {
                        boolean seguir = true;
                        secuencia = 0;
                        while (seguir) {
                            seguir = false;
                            for (int j = 0; j < clon.length; j++) {
                                if (clon[j][0].toString().trim().equals(nameDefauld + secuencia)) {
                                    seguir = true;
                                    secuencia++;
                                    break;
                                }
                            }
                        }
                        //                        FactorRiesgoMatrizCorrelacionMetrica newFactor=new FactorRiesgoMatrizCorrelacionMetrica (nameDefauld+secuencia,)
                        obj[i][0] = nameDefauld + secuencia;
                        obj[i][1] = false;
                        obj[i][2] = new Double(0);

                    }
                }
            } else {
                obj = new Object[1][3];
                obj[0][0] = nameDefauld + secuencia;
                obj[0][1] = false;
                obj[0][2] = new Double(0);
                secuencia++;
            }
            setDataFactor(obj);
            //            Table_Factores.setRowSelectionInterval(obj.length-1,obj.length-1);
            Text_NumeroFactores.setText(String.valueOf(obj.length));
            modelo.adicionarFactor();
        }
    //Table_Factores.requestFocusInWindow();
    }//GEN-LAST:event_Button_AddFactorActionPerformed

    private void Table_FactoresMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_Table_FactoresMouseClicked
//        System.out.println(Table_Factores.getSelectedRow());
        if (Table_Factores.isEnabled() && Table_Factores.getSelectedRow() > -1 && Table_Factores.getSelectedColumn() == 1) {
            Table_Factores.setEnabled(false);
            Button_RemFactor.setEnabled(true);
            Button_AddFactor.setEnabled(true);
            eliminarNoConfirmar = false;
            int col = Table_Factores.getSelectedColumn();
            manipularFactor(col == 1 ? true : false);
            Table_Factores.setEnabled(true);
        } else if (evt.getClickCount() >= 2 && Table_Factores.isEnabled() && Table_Factores.getSelectedRow() > -1 && Table_Factores.getSelectedColumn() == 0) {
            String digitado = JOptionPane.showInputDialog("Digita el nuevo nombre del factor de Riesgo");
            if (Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow(), Table_Factores.getSelectedColumn()) instanceof ig.metrica.riesgo.FactorRiesgoMatrizCorrelacionMetrica) {
                if (digitado != null && !digitado.equals("")) {
                    ((ig.metrica.riesgo.FactorRiesgoMatrizCorrelacionMetrica) Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow(), Table_Factores.getSelectedColumn())).setNombre(digitado);
                }
            } else if (Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow(), Table_Factores.getSelectedColumn()) instanceof String) {
                Table_Factores.getModel().setValueAt(digitado, Table_Factores.getSelectedRow(), Table_Factores.getSelectedColumn());
            }
            Table_Factores.updateUI();
        }
    }//GEN-LAST:event_Table_FactoresMouseClicked

    private boolean manipularFactor(Boolean valor) {
        // TODO add your handling code here:
        if (valor) {
            Object value = null;
            try {
                value = Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow(), 1);
                row = Table_Factores.getSelectedRow();
            } catch (Exception e) {
                value = Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow() - 1, 1);
                row = Table_Factores.getSelectedRow() - 1;
            }

            if (((Boolean) value)) {
                if (JOptionPane.showConfirmDialog(this, "Se agregara el factor seleccionado a la matriz de correlaci\u00F3n", "Confirmaci\u00F3n", JOptionPane.OK_CANCEL_OPTION) == 0) {
                    ((ModelTabla) Table_MatrixCorrelacion.getModel()).addData(Table_Factores.getModel().getValueAt(Table_Factores.getSelectedRow(), Table_Factores.getSelectedColumn() - 1));
                    return true;
                } else {
                    Table_Factores.getModel().setValueAt(false, Table_Factores.getSelectedRow(), 1);
                }
            } else if (modelo.isFactorMatriz(Table_Factores.getModel().getValueAt(row, 0).toString())) {
                if (JOptionPane.showConfirmDialog(this, "Se removera el factor seleccionado de la Matriz de correclaci\u00F3n", "Confirmaci\u00F3n", JOptionPane.OK_CANCEL_OPTION) == 0) {
                    ((ModelTabla) Table_MatrixCorrelacion.getModel()).removeData(Table_Factores.getModel().getValueAt(row, 0));
                    //                    ((ig.metrica.riesgo.FactorRiesgoMatrizCorrelacionMetrica)((MyTableModelFactores)Table_MatrixCorrelacion.getModel()).getValueAt(row,0)).setNuevo(null);
                    return true;
                } else {
                    Table_Factores.getModel().setValueAt(true, Table_Factores.getSelectedRow(), 1);
                }
            } else {
                return true;
            }
        }
        return false;
    }

//    void setTipo(Integer integer) {
//        this.CTipo.setSelectedIndex(integer);
//        if (integer.equals(0)) {
//            this.PanelMatrizCorrelacion.setVisible(true);
//        } else {
//            this.PanelMatrizCorrelacion.setVisible(false);
//        }
//    }

//    public Collection getZonas() {
//        return ((TableModelZonas) this.TZonas.getModel()).getData();
//    }
//
//    public Collection getAjustesAlternos() {
//        return ((TableModelAlternos) this.TAjustes.getModel()).getData();
//    }
    public MatrizDTO getDTO() {
        MatrizDTO DTO = new MatrizDTO();
        DTO.setNombre(this.Text_NombreMatriz.getText());
        DTO.setDescripcion(this.TextA_Descripcion.getText());
        DTO.setFechaPublicacion(this.getFechaDefinicion());
        DTO.setNumfactores(this.getNumeroFactores());
        DTO.setTipo(this.getTipo());
        DTO.setId(this.getId());
        return DTO;
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.ButtonGroup BGTablas;
    private javax.swing.JButton Button_AddFactor;
    private javax.swing.JButton Button_RemFactor;
    private javax.swing.JFormattedTextField FText_FechaPublicacion;
    private javax.swing.JPanel PanelMatrizCorrelacion;
    private javax.swing.JPanel Panel_DatosMatriz;
    private javax.swing.JTabbedPane TPane;
    private javax.swing.JTable Table_Factores;
    private javax.swing.JTable Table_MatrixCorrelacion;
    private javax.swing.JTextArea TextA_Descripcion;
    private javax.swing.JTextField Text_NombreMatriz;
    private javax.swing.JTextField Text_NumeroFactores;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    // End of variables declaration//GEN-END:variables
}